package org.platon.template;

import ai.platon.pulsar.context.PulsarContexts;
import ai.platon.pulsar.dom.FeaturedDocument;
import ai.platon.pulsar.persist.WebPage;
import ai.platon.pulsar.session.PulsarSession;
import com.google.gson.Gson;
import org.jsoup.nodes.Element;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class BasicUsage {
    public static void main(String[] args) {
        // 创建Pulsar Session对象
        PulsarSession session = PulsarContexts.createSession();
// 定义URL
        String url = "https://list.jd.com/list.html?cat=652,12345,12349";
// 加载页面，如果页面已过期或首次加载，则从Web获取
        WebPage page = session.load(url, "-expires 1d -refresh -parse ");
// 将页面内容解析为Jsoup文档对象
        FeaturedDocument document = session.parse(page, false);
// 对文档对象进行操作
// ...

// 或者，直接加载并解析
        FeaturedDocument document2 = session.loadDocument(url, "-expires 1d");
// 对文档对象进行操作
// ...

// 加载所有指定链接的页面
        List<WebPage> pages = session.loadOutPages(url, "-expires 1d -itemExpires 7d -outLink a[href~=item]");
// 加载、解析并爬取字段
        List<Map<String, String>> fields = session.scrape(url, "-expires 1d", "li[data-sku]",
                Arrays.asList(".p-name em", ".p-price"));
// 加载、解析并爬取指定名称的字段
        List<Map<String, String>> fields2 = session.scrape(url, "-i 1d", "li[data-sku]",
                Map.of("name", ".p-name em", "price", ".p-price"));

// 输出文档对象的标题
        System.out.println("== document");
        System.out.println(document.getTitle());
        Element ele = document.selectFirstOrNull("title");
        if (ele != null) {
            System.out.println(ele.text());
        }

// 输出文档对象2的标题
        System.out.println("== document2");
        System.out.println(document2.getTitle());
        ele = document.selectFirstOrNull("title");
        if (ele != null) {
            System.out.println(ele.text());
        }
// 输出加载的页面URL列表
        System.out.println("== pages");
        System.out.println(pages.stream().map(WebPage::getUrl).collect(Collectors.toList()));

// 将爬取到的字段转换为JSON格式并输出
        Gson gson = new Gson();
        System.out.println("== fields");
        System.out.println(gson.toJson(fields));

// 将爬取到的命名字段转换为JSON格式并输出
        System.out.println("== fields2");
        System.out.println(gson.toJson(fields2));
    }
}
